<template>
  <div class="region">
    <div class="content">
      <div class="left">地区：</div>
      <ul>
        <li :class="{ active: regionValue == '' }" @click="changeRegion('')">
          全部
        </li>
        <li
          v-for="item in regionArr"
          :key="item.id"
          :class="{ active: regionValue == item.value }"
          @click="changeRegion(item.value)"
        >
          {{ item.name }}
        </li>
      </ul>
    </div>
  </div>
</template>

<script setup lang="ts" name="Region">
import { reqHospitalLevelOrRegion } from '@/api/home'
import type { HospitalLevelAndRegionArr } from '@/api/home/type'
import { ElMessage } from 'element-plus'
import { onMounted, ref } from 'vue'

// 存储全部地区的数据
let regionArr = ref<HospitalLevelAndRegionArr>([])
// 当前点击的地区的值
let regionValue = ref('')
// 声明父组件绑定的自定义事件
const emit = defineEmits(['get-region'])

// 获取全部地区的方法
const getRegion = async () => {
  let result = await reqHospitalLevelOrRegion('Beijin')
  if (result.code === 200) {
    // 存储获取到的地区的数据
    regionArr.value = result.data
  } else {
    ElMessage.error('获取地区失败')
  }
}
// 点击地区的事件回调
const changeRegion = (value: string) => {
  // 修改当前点击地区的值进行高亮显示
  regionValue.value = value
  // 触发自定义事件将地区值传递给父组件用于获取医院数据
  emit('get-region', value)
}

onMounted(() => {
  // 组件挂载后获取全部地区的数据
  getRegion()
})
</script>

<style scoped lang="scss">
.region {
  width: 100%;
  color: #7f7f7f;
  margin-bottom: 20px;
  .content {
    display: flex;
    .left {
      flex: 72px; // 固定宽度
    }
    ul {
      display: flex;
      flex-wrap: wrap; // 换行
      li {
        margin-right: 20px;
        margin-bottom: 15px;
        &.active {
          color: $base-active-color;
        }
        &:hover {
          color: $base-active-color;
          cursor: pointer;
        }
      }
    }
  }
}
</style>
